-- $LastChangedDate: 2007-06-01 02:52:33 +0200 (Fri, 01 Jun 2007) $
-- $LastChangedRevision: 149 $
-- $LastChangedBy: vicente $

-- packages de ada

SEPARATE (Tareas.Gaparatos.Realizar_Ejercicio)

   -- Devuelve una medicion para una determinada edad basada en
   -- los intervalos generados a partir de una U(0,1) que tiene asociados
   -- cada una de las edades posibles.

FUNCTION Calcular_Medicion (
      G    : IN     Generator;
      Edad :        Tipoedad)
  RETURN Tipomedicion IS

   -- probabilidad
   P : Integer;

   TYPE Tipointervalos IS ARRAY (Tipoedad, Tipomedicion) OF Integer;

   -- definicion de los intervalos para obtener las mediciones
   Intervalos : CONSTANT Tipointervalos := ((2, 10, 90, 98, 100), (5, 20, 80, 95, 100), (10, 30, 70, 90, 100));

BEGIN
   -- obtener una muestra del generador
   -- y pasarla a su correspondiente %
   P:= Integer(Random(G)*100.0);

   IF P IN 0 .. Intervalos(Edad,Muy_Bajo) - 1 THEN
      RETURN Muy_Bajo;
   END IF;

   IF P IN Intervalos(Edad, Muy_Bajo) .. Intervalos(Edad, Bajo) - 1 THEN
      RETURN Bajo;
   END IF;

   IF P IN Intervalos(Edad, Bajo) .. Intervalos(Edad, Normal) - 1 THEN
      RETURN Normal;
   END IF;

   IF P IN Intervalos(Edad, Normal) .. Intervalos(Edad, Alto) - 1 THEN
      RETURN Alto;
   END IF;

   RETURN Muy_Alto;

END Calcular_Medicion;
